home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / DELPHI32 / COMPNENT / ISAMEXPT / ISAMEXPT.ZIP / ISAMEXPT.PAS < prev    next >
Pascal/Delphi Source File  |  1996-04-05  |  34KB  |  1,045 lines

  1. {C 1996 Stellberg GmbH}
  2. { HISTORY OF CHANGES:  see CHANGES.PAS }
  3. unit Isamexpt;
  4.  
  5. interface
  6.  
  7. uses
  8.   SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  9.   Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, Menus, ToolIntf,
  10.   ExptIntf;
  11.  
  12. type
  13.   TIsamMainForm = class(TForm)
  14.     StatusLine: TPanel;
  15.     OpenDialog1: TOpenDialog;
  16.     SaveDialog1: TSaveDialog;
  17.     Sample: TPaintBox;
  18.     Notebook1: TNotebook;
  19.     GroupBox1: TGroupBox;
  20.     CancelBttn: TBitBtn;
  21.     Rueckbttn: TBitBtn;
  22.     VorBttn: TBitBtn;
  23.     GroupBox2: TGroupBox;
  24.     EdiHauptCheck: TCheckBox;
  25.     GroupBox4: TGroupBox;
  26.     BrwHauptCheck: TCheckBox;
  27.     FileopenBttn: TSpeedButton;
  28.     GroupBox5: TGroupBox;
  29.     Label7: TLabel;
  30.     Label4: TLabel;
  31.     Edit1: TEdit;
  32.     Label3: TLabel;
  33.     SpeedButton1: TSpeedButton;
  34.     Label6: TLabel;
  35.     Edit3: TEdit;
  36.     SpeedButton3: TSpeedButton;
  37.     BrwCheck: TCheckBox;
  38.     EdiCheck: TCheckBox;
  39.     Label9: TLabel;
  40.     DirInput: TEdit;
  41.     SpeedButton4: TSpeedButton;
  42.     Label10: TLabel;
  43.     Label11: TLabel;
  44.     IniDatNamInput: TEdit;
  45.     IniBrwNamInput: TEdit;
  46.     GroupBox6: TGroupBox;
  47.     LabelNebenRadio: TRadioButton;
  48.     LabelueberRadio: TRadioButton;
  49.     GroupBox7: TGroupBox;
  50.     LenFestRadio: TRadioButton;
  51.     LenVarRadio: TRadioButton;
  52.     EdiFontLabel: TLabel;
  53.     EdiInputFontLabel: TLabel;
  54.     SpeedButton5: TSpeedButton;
  55.     SpeedButton6: TSpeedButton;
  56.     FontDialog1: TFontDialog;
  57.     SpeedButton7: TSpeedButton;
  58.     LboxFontLabel: TLabel;
  59.     Memo1: TMemo;
  60.     GroupBox9: TGroupBox;
  61.     Memo2: TMemo;
  62.     GroupBox10: TGroupBox;
  63.     Memo3: TMemo;
  64.     Label2: TLabel;
  65.     TableNameInput: TEdit;
  66.     HelpBttn: TBitBtn;
  67.     SprachBttn: TBitBtn;
  68.     DateiBttn: TSpeedButton;
  69.     OpenDialog2: TOpenDialog;
  70.     EditorFormNameInput: TEdit;
  71.     BrwFormNameInput: TEdit;
  72.     Label1: TLabel;
  73.     DBaseExpCheck: TCheckBox;
  74.     DBaseImpCheck: TCheckBox;
  75.     DBStruEdit: TEdit;
  76.     Label5: TLabel;
  77.     DBStruBttn: TSpeedButton;
  78.     TblCreatCheck: TCheckBox;
  79.     SaveTypBttn: TBitBtn;
  80.     SaveDialog2: TSaveDialog;
  81.     BrwSetupCheck: TCheckBox;
  82.     AliasEdit: TComboBox;
  83.     Label8: TLabel;
  84.     procedure FormCreate(Sender: TObject);
  85.     procedure ShowHint(Sender: TObject);
  86.     procedure FileopenBttnClick(Sender: TObject);
  87.     procedure EndeBttnClick(Sender: TObject);
  88.     procedure FormDestroy(Sender: TObject);
  89.     procedure SamplePaint(Sender: TObject);
  90.     procedure EdiCheckClick(Sender: TObject);
  91.     procedure CancelBttnClick(Sender: TObject);
  92.     procedure RueckbttnClick(Sender: TObject);
  93.     procedure VorBttnClick(Sender: TObject);
  94.     procedure EdiHauptCheckClick(Sender: TObject);
  95.     procedure BrwHauptCheckClick(Sender: TObject);
  96.     procedure SpeedButton1Click(Sender: TObject);
  97.     procedure SpeedButton3Click(Sender: TObject);
  98.     procedure SpeedButton4Click(Sender: TObject);
  99.     procedure SpeedButton5Click(Sender: TObject);
  100.     procedure SpeedButton6Click(Sender: TObject);
  101.     procedure SpeedButton7Click(Sender: TObject);
  102.     procedure Memo1Exit(Sender: TObject);
  103.     procedure HelpBttnClick(Sender: TObject);
  104.     procedure FormKeyDown(Sender: TObject; var Key: Word;
  105.       Shift: TShiftState);
  106.     procedure FormShow(Sender: TObject);
  107.     procedure SprachBttnClick(Sender: TObject);
  108.     procedure DateiBttnClick(Sender: TObject);
  109.     procedure Edit1Exit(Sender: TObject);
  110.     procedure Edit3Exit(Sender: TObject);
  111.     procedure EditorFormNameInputExit(Sender: TObject);
  112.     procedure BrwFormNameInputExit(Sender: TObject);
  113.     procedure TableNameInputExit(Sender: TObject);
  114.     procedure DirInputExit(Sender: TObject);
  115.     procedure DBaseExpCheckClick(Sender: TObject);
  116.     procedure DBaseImpCheckClick(Sender: TObject);
  117.     procedure DBStruEditExit(Sender: TObject);
  118.     procedure DBStruBttnClick(Sender: TObject);
  119.     procedure FormKeyPress(Sender: TObject; var Key: Char);
  120.     procedure SaveTypBttnClick(Sender: TObject);
  121.     procedure AliasEditClick(Sender: TObject);
  122.     Private
  123.     DrawBitmap: TBitmap;
  124.     RecList,KeyList,IIDList: TStringList;
  125.     Sprache: Integer;
  126.     TypDateiName: String;
  127.     Procedure CheckButtons;
  128.     function DoFormCreation(const FormIdent: string): TForm;
  129.     function CreateEditorSource(const UnitIdent, FormIdent: string): TMemoryStream;
  130.     function CreateEditorForm(const FormIdent: string): TMemoryStream;
  131.     function DoBrwFormCreation(const FormIdent: string): TForm;
  132.     function CreateBrowserForm(const FormIdent: string): TMemoryStream;
  133.     function CreateBrowserSource(const UnitIdent, FormIdent,
  134.                    EdiUnitIdent, EdiFormIdent: string): TMemoryStream;
  135.     function CreateStru(Const FormIdent: String): TMemoryStream;
  136.     Procedure Update_Listen(i: Integer);
  137.     Procedure Setze_Sprache(S: Integer);
  138.   end;
  139.  
  140.   TIsamDialogExpert = class(TIExpert)
  141.   public  { Methods required by Delphi to define the expert }
  142.     function GetName: string; override;
  143.     function GetComment: string; override;
  144.     function GetGlyph: HBITMAP; override;
  145.     function GetStyle: TExpertStyle; override;
  146.     function GetState: TExpertState; override;
  147.     function GetIDString: string; override;
  148.     procedure Execute; override;
  149.   public
  150.   private
  151.   end;
  152.  
  153. implementation
  154.  
  155. Uses Db, Proxies, IStreams, DirAusw, UToolDll,
  156.      WntIsam1, WntIsam2, WntIsam3, WntIsam4,
  157.      VirtIntf, Inifiles;
  158.  
  159. {$R *.DFM}
  160. {$R EXPTISAM.RES}
  161.  
  162. procedure HandleException;
  163. begin
  164.   ToolServices.RaiseException(ReleaseException);
  165. end;
  166.  
  167. procedure WntvIsamDialogExpert(ToolServices: TIToolServices);
  168. var
  169.   D: TIsamMainForm;
  170.   ISourceStream, IFormStream, IStruStream: TIMemoryStream;
  171.   UnitIdent, FormIdent, BrwIdent: string[79];
  172.   BrwUnitIdent, BrwFileName, StruIdent: String;
  173.   UZahl,Code: Integer;
  174.   StruFileName,UStr, Dir: String;
  175.   FileName: TFileName;
  176.   IniFile : TIniFile;
  177. begin
  178.   if ToolServices = nil then Exit;
  179.   if ToolServices.GetNewModuleName(UnitIdent, FileName) then
  180.   begin
  181.     D := TIsamMainForm.Create(Application);
  182.     try
  183.       D.Edit1.Text:= '';
  184.       D.Edit3.Text:= '';
  185.       Inifile:= TIniFile.Create('ISAMEXPT.INI');
  186.       Dir:= IniFile.ReadString('EXPERT','PATH','');
  187.       D.Sprache:= IniFile.ReadInteger('EXPERT','LANGUAGE',0);
  188.       D.TblCreatCheck.Checked:= (IniFile.ReadInteger('EXPERT','CREATEBUTTON',0) = 1);
  189.       D.BrwSetupCheck.Checked:= (IniFile.ReadInteger('EXPERT','SETUPBUTTON',0) = 1);
  190.       D.DBaseExpCheck.Checked:= (IniFile.ReadInteger('EXPERT','DBASEEXPORT',0) = 1);
  191.       D.DBaseImpCheck.Checked:= (IniFile.ReadInteger('EXPERT','DBASEIMPORT',0) = 1);
  192.       IniFile.Free;
  193.       D.DirInput.Text:= Dir;
  194.       if D.ShowModal = mrOK then begin
  195.         Dir:= D.DirInput.Text;
  196.         Inifile:= TIniFile.Create('ISAMEXPT.INI');
  197.         IniFile.WriteString('EXPERT','PATH',Dir);
  198.         IniFile.WriteInteger('EXPERT','LANGUAGE',D.Sprache);
  199.         if D.TblCreatCheck.Checked then
  200.           IniFile.WriteInteger('EXPERT','CREATEBUTTON',1)
  201.         else
  202.           IniFile.WriteInteger('EXPERT','CREATEBUTTON',0);
  203.         if D.BrwSetupCheck.Checked then
  204.           IniFile.WriteInteger('EXPERT','SETUPBUTTON',1)
  205.         else
  206.           IniFile.WriteInteger('EXPERT','SETUPBUTTON',0);
  207.         if D.DBaseExpCheck.Checked then
  208.           IniFile.WriteInteger('EXPERT','DBASEEXPORT',1)
  209.         else
  210.           IniFile.WriteInteger('EXPERT','DBASEEXPORT',0);
  211.         if D.DBaseImpCheck.Checked then
  212.           IniFile.WriteInteger('EXPERT','DBASEIMPORT',1)
  213.         else
  214.           IniFile.WriteInteger('EXPERT','DBASEIMPORT',0);
  215.         IniFile.Free;
  216.         UnitIdent:= D.Edit1.Text;
  217.         if Pos('.',UnitIdent) > 0 then UnitIdent:= Copy(UnitIdent,1,Pos('.',UnitIdent)-1);
  218.         FormIdent:= D.EditorFormNameInput.Text;
  219.         if Pos('.',FormIdent) > 0 then FormIdent:= Copy(FormIdent,1,Pos('.',FormIdent)-1);
  220.         BrwUnitIdent:= D.Edit3.Text;
  221.         BrwIdent := D.BrwFormNameInput.Text;
  222.         FileName:= Dir + UnitIdent + '.PAS';
  223.         BrwFileName:= Dir + BrwUnitIdent + '.PAS';
  224.         if D.BrwCheck.Checked then begin
  225.           IFormStream := TIMemoryStream.Create(D.CreateBrowserForm(BrwIdent));
  226.           try
  227.             ISourceStream := TIMemoryStream.Create(D.CreateBrowserSource(BrwUnitIdent, BrwIdent,
  228.                                                                          UnitIdent, FormIdent));
  229.             try
  230.               ToolServices.CreateModule(BrwFileName, ISourceStream, IFormStream,
  231.                 [cmAddToProject, cmShowSource, cmShowForm, cmUnNamed,
  232.                 cmMarkModified]);
  233.             finally
  234.               ISourceStream.OwnStream := True;
  235.               ISourceStream.Free;
  236.             end;
  237.           finally
  238.             IFormStream.OwnStream := True;
  239.             IFormStream.Free;
  240.           end;
  241.         end;
  242.         if D.EdiCheck.Checked then begin
  243.           IFormStream := TIMemoryStream.Create(D.CreateEditorForm(FormIdent));
  244.           try
  245.             ISourceStream := TIMemoryStream.Create(D.CreateEditorSource(UnitIdent, FormIdent));
  246.             try
  247.               ToolServices.CreateModule(FileName, ISourceStream, IFormStream,
  248.                 [cmAddToProject, cmShowSource, cmShowForm, cmUnNamed,
  249.                 cmMarkModified]);
  250.             finally
  251.               ISourceStream.OwnStream := True;
  252.               ISourceStream.Free;
  253.             end;
  254.           finally
  255.             IFormStream.OwnStream := True;
  256.             IFormStream.Free;
  257.           end;
  258.         end;
  259.         if (D.DBaseExpCheck.Checked) or (D.DbaseImpCheck.Checked) then begin
  260.           StruIdent:= D.DBStruEdit.Text;
  261.           if Pos('.',StruIdent) > 0 then StruIdent:= Copy(StruIdent,1,Pos('.',StruIdent)-1);
  262.           StruFileName:= Dir + StruIdent + '.PAS';
  263.           IStruStream := TIMemoryStream.Create(D.CreateStru(StruIdent));
  264.           try
  265.             ToolServices.CreateModule(StruFileName, IStruStream, NIL,
  266.               [cmAddToProject, cmShowSource, cmUnNamed, cmMarkModified]);
  267.           finally
  268.             IStruStream.OwnStream := True;
  269.             IStruStream.Free;
  270.           end;
  271.         end;
  272.       end;
  273.     finally
  274.       D.Free;
  275.     end;
  276.   end;
  277. end;
  278.  
  279. { tIsamDialogExpert }
  280. function tIsamDialogExpert.GetName: string;
  281. begin
  282.   try
  283.     Result := 'ISAM_Expert';
  284.   except
  285.     HandleException;
  286.   end;
  287. end;
  288.  
  289. function tIsamDialogExpert.GetComment: string;
  290. begin
  291.   try
  292.     Result := 'ISAM-Dialogexperte';
  293.   except
  294.     HandleException;
  295.   end;
  296. end;
  297.  
  298. function tIsamDialogExpert.GetGlyph: HBITMAP;
  299. begin
  300.   try
  301.     Result := LoadBitmap(HInstance, 'IS_EXPT');
  302.   except
  303.     HandleException;
  304.   end;
  305. end;
  306.  
  307. function tIsamDialogExpert.GetStyle: TExpertStyle;
  308. begin
  309.   try
  310.     Result := esForm;
  311.   except
  312.     HandleException;
  313.   end;
  314. end;
  315.  
  316. function tIsamDialogExpert.GetState: TExpertState;
  317. begin
  318.   try
  319.     Result := [esEnabled];
  320.   except
  321.     HandleException;
  322.   end;
  323. end;
  324.  
  325. function tIsamDialogExpert.GetIDString: string;
  326. begin
  327.   try
  328.     Result := 'ISAM_Expert';
  329.   except
  330.     HandleException;
  331.   end;
  332. end;
  333.  
  334. procedure tIsamDialogExpert.Execute;
  335. begin
  336.   try
  337.     WntvIsamDialogExpert(ToolServices);
  338.   except
  339.     HandleException;
  340.   end;
  341. end;
  342.  
  343. procedure TIsamMainForm.FormCreate(Sender: TObject);
  344. begin
  345.   DrawBitmap := TBitmap.Create;
  346.   Application.OnHint := ShowHint;
  347.   CheckButtons;
  348.   RecList:= TStringList.Create;
  349.   KeyList:= TStringList.Create;
  350.   IIDList:= TStringList.Create;
  351.   Sprache:= 0;
  352.   TypDateiName:= '';
  353.   Session.GetAliasNames(AliasEdit.Items);
  354. end;
  355.  
  356. procedure TIsamMainForm.ShowHint(Sender: TObject);
  357. begin
  358.   StatusLine.Caption := Application.Hint;
  359. end;
  360.  
  361. Procedure TIsamMainForm.CheckButtons;
  362. var i: Integer;
  363. begin
  364.   i:= Notebook1.PageIndex;
  365.   if I = 4 then SaveTypBttn.Visible:= True
  366.   else SaveTypBttn.Visible:= False;
  367.   RueckBttn.Enabled:= I > 0;
  368.   if I = 0 then VorBttn.Enabled:= (Memo1.Lines.Count > 0)
  369.   else if I = 1 then VorBttn.Enabled:= (Memo2.Lines.Count > 0) and (Memo3.Lines.Count > 0)
  370.   else if I = 4 then VorBttn.Enabled:= ((DBStruEdit.Text <> '') and (AliasEdit.Text <> ''))
  371.                                        or ((DBaseExpCheck.Checked = False) and (DBaseImpCheck.Checked = False))
  372.   else
  373.     VorBttn.Enabled:= (DirInput.Text <> '') and
  374.     (((EdiCheck.Checked) and (Edit1.Text <> '') and (EditorFormNameInput.Text <> '')) or (EdiCheck.Checked = False)) and
  375.     (((BrwCheck.Checked) and (Edit3.Text <> '') and (BrwFormNameInput.Text <> '')) or (BrwCheck.Checked = False)) and
  376.     ((BrwCheck.Checked) or (EdiCheck.Checked));
  377.   if VorBttn.Enabled then begin
  378.     if I = 4 then VorBttn.Caption:= '&Create'
  379.     else begin
  380.       if Sprache = 1 then Vorbttn.Caption:= '&Forward'
  381.       else VorBttn.Caption:= '&Weiter';
  382.     end;
  383.   end;
  384. end;
  385.  
  386. procedure TIsamMainForm.FileopenBttnClick(Sender: TObject);
  387. var TypDatei:  TextFile;
  388.     RecEinlesen,KeyEinlesen: Boolean;
  389.     TypText,TText : String;
  390. begin
  391.   if OpenDialog1.Execute then begin
  392.     TypDateiName:= OpenDialog1.FileName;
  393.     Memo1.Lines.Clear;
  394.     KeyList.Clear;
  395.     IIDList.Clear;
  396.     AssignFile(TypDatei,TypDateiName);
  397.     Reset(TypDatei);
  398.     RecEinlesen:= False;
  399.     KeyEinlesen:= False;
  400.     Repeat
  401.       ReadLn(TypDatei,TypText);
  402.       TText:= UpperCase(TypText);
  403.       Strip(TText);
  404.       if Pos('{TABLENAME=',TText) > 0 then begin
  405.         TText:= Copy(TText,12,Length(TText)-12);
  406.         TableNameInput.Text:= TText;
  407.       end
  408.       else if Pos('{EDITORFORMNAME=',TText) > 0 then begin
  409.         TText:= Copy(TText,17,Length(TText)-17);
  410.         EditorFormNameInput.Text:= TText;
  411.       end
  412.       else if Pos('{EDITORUNITNAME=',TText) > 0 then begin
  413.         TText:= Copy(TText,17,Length(TText)-17);
  414.         Edit1.Text:= TText;
  415.       end
  416.       else if Pos('{BROWSERFORMNAME=',TText) > 0 then begin
  417.         TText:= Copy(TText,18,Length(TText)-18);
  418.         BrwFormNameInput.Text:= TText;
  419.       end
  420.       else if Pos('{BROWSERUNITNAME=',TText) > 0 then begin
  421.         TText:= Copy(TText,18,Length(TText)-18);
  422.         Edit3.Text:= TText;
  423.       end
  424.       else if Pos('{STRUUNITNAME=',TText) > 0 then begin
  425.         TText:= Copy(TText,15,Length(TText)-15);
  426.         DBStruEdit.Text:= TText;
  427.       end
  428.       else begin
  429.         if (Pos('TYPE',TText) > 0) or (Pos('=RECORD',TText) > 0) then RecEinlesen:= True;
  430.         if (Pos('KEYBEGIN',TText) > 0) then KeyEinlesen:= True;
  431.         if RecEinlesen then Memo1.Lines.Add(TypText);
  432.         if KeyEinlesen then KeyList.Add(TypText);
  433.         if Pos('END;',TText) > 0 then RecEinlesen:= False;
  434.         if Pos('KEYEND',TText) > 0 then KeyEinlesen:= False;
  435.       end;
  436.     Until (Eof(TypDatei));
  437.     CloseFile(TypDatei);
  438.     If Memo1.Lines.Count < 1 then begin
  439.       if Sprache = 1 then ErrorWindow('TYP-File has not the expected format','')
  440.       else Errorwindow('Typ-Datei hat das falsche Format','');
  441.     end;
  442.   end;
  443.   CheckButtons;
  444. end;
  445.  
  446. procedure TIsamMainForm.EndeBttnClick(Sender: TObject);
  447. begin
  448.   Close;
  449. end;
  450.  
  451. procedure TIsamMainForm.FormDestroy(Sender: TObject);
  452. begin
  453.   RecList.Free;
  454.   IIDList.Free;
  455.   KeyList.Free;
  456.   DrawBitmap.Free;
  457. end;
  458.  
  459. procedure TIsamMainForm.SamplePaint(Sender: TObject);
  460. var X, Y: Integer;
  461. begin
  462.   DrawBitmap.Handle := LoadBitmap(HInstance, 'DIALOG');
  463.   Sample.Canvas.Draw(0, 0, DrawBitmap);
  464. end;
  465.  
  466. function TIsamMainForm.DoFormCreation(const FormIdent: string): TForm;
  467. begin
  468.   DoFormCreation:= Erzeuge_EditorForm(FormIdent,RecList,
  469.                                       LabelNebenRadio.Checked,
  470.                                       LenFestRadio.Checked,
  471.                                       EdiFontLabel.Font,
  472.                                       EdiInputFontLabel.Font,
  473.                                       Sprache);
  474. end;
  475.  
  476. function TIsamMainForm.CreateEditorSource(const UnitIdent, FormIdent: string): TMemoryStream;
  477. begin
  478.   CreateEditorSource:= Erzeuge_EditorSource(UnitIdent, FormIdent,
  479.                                       RecList, KeyList,
  480.                                       Sprache,TypDateiName);
  481. end;
  482.  
  483. function TIsamMainForm.CreateEditorForm(const FormIdent: string): TMemoryStream;
  484. var DlgForm: TForm;
  485. begin
  486.   Result := nil;
  487.   DlgForm := DoFormCreation(FormIdent);
  488.   try
  489.     Result := TMemoryStream.Create;
  490.     Result.WriteComponentRes(FormIdent, DlgForm);
  491.     Result.Position := 0;
  492.   finally
  493.     DlgForm.Free;
  494.   end;
  495. end;
  496.  
  497. function TIsamMainForm.DoBrwFormCreation(const FormIdent: string): TForm;
  498. var TblNam: String;
  499. begin
  500.   TblNam:= TableNameInput.Text;
  501.   if Pos('.',TblNam) > 0 then TblNam:= Copy(TblNam,1,Pos('.',TblNam)-1);
  502.   DoBrwFormCreation:= Erzeuge_BrowserForm(FormIdent,
  503.                                           TblNam,
  504.                                           IniDatNamInput.Text,
  505.                                           IniBrwNamInput.Text,
  506.                                           LboxFontLabel.Font,
  507.                                           IIDList,KeyList,RecList,
  508.                                           DbaseExpCheck.Checked,
  509.                                           DBaseImpCheck.Checked,
  510.                                           Sprache,
  511.                                           TblCreatCheck.Checked,
  512.                                           BrwSetupCheck.Checked);
  513. end;
  514.  
  515. function TIsamMainForm.CreateBrowserForm(const FormIdent: string): TMemoryStream;
  516. var DlgForm: TForm;
  517. begin
  518.   Result := nil;
  519.   DlgForm := DoBrwFormCreation(FormIdent);
  520.   try
  521.     Result := TMemoryStream.Create;
  522.     Result.WriteComponentRes(FormIdent, DlgForm);
  523.     Result.Position := 0;
  524.   finally
  525.     DlgForm.Free;
  526.   end;
  527. end;
  528.  
  529. function TIsamMainForm.CreateBrowserSource(const UnitIdent, FormIdent,
  530.   EdiUnitIdent, EdiFormIdent: string): TMemoryStream;
  531. begin
  532.   CreateBrowserSource:= Erzeuge_BrowserSource(UnitIdent, FormIdent,
  533.                                    EdiUnitIdent, EdiFormIdent,
  534.                                    BrwHauptCheck.Checked,
  535.                                    RecList,KeyList,IIDList,
  536.                                    DbaseExpCheck.Checked,
  537.                                    DBaseImpCheck.Checked,
  538.                                    DBStruEdit.Text,Sprache,
  539.                                    TblCreatCheck.Checked,
  540.                                    BrwSetupCheck.Checked,
  541.                                    TypDateiName,
  542.                                    AliasEdit.Text);
  543. end;
  544.  
  545. function TIsamMainForm.CreateStru(Const FormIdent: String): TMemoryStream;
  546. begin
  547.   CreateStru:= Erzeuge_Struktur(FormIdent,RecList,KeyList);
  548. end;
  549.  
  550. procedure TIsamMainForm.EdiCheckClick(Sender: TObject);
  551. begin
  552.   CheckButtons;
  553. end;
  554.  
  555. procedure TIsamMainForm.CancelBttnClick(Sender: TObject);
  556. begin
  557.   ModalResult:= mrCancel;
  558. end;
  559.  
  560. procedure TIsamMainForm.RueckbttnClick(Sender: TObject);
  561. var i: Integer;
  562. begin
  563.   i:= Notebook1.PageIndex;
  564.   Case I of
  565.     5: i:= 4;
  566.     4: i:= 3;
  567.     3: i:= 2;
  568.     2: begin
  569.          Update_Listen(2);
  570.          I:= 1;
  571.        end;
  572.     1: begin
  573.          Update_Listen(1);
  574.          i:= 0;
  575.        end;
  576.     else i:= 0;
  577.   end;
  578.   Notebook1.PageIndex:= i;
  579.   CheckButtons;
  580. end;
  581.  
  582. Procedure Check_KeyList(S: String; KList: TStringList);
  583. var ZStr,KStr: String;
  584.     K,KeyLen,xPos,idx,Code: Integer;
  585.     Gefunden,DupKey: Boolean;
  586. begin
  587.   ZStr:= S;
  588.   Idx:= 0;
  589.   xPos:= Pos('[',ZStr);
  590.   if xPos > 0 then begin
  591.     Delete(ZStr,1,xPos);
  592.     xPos:= Pos(']',ZStr);
  593.     if xPos > 0 then begin
  594.       ZStr:= Copy(ZStr,1,xPos-1);
  595.       Strip(ZStr);
  596.       Val(ZStr,idx,Code);
  597.     end;
  598.   end;
  599.   if idx > 0 then begin
  600.     K:= 0;
  601.     Gefunden:= False;
  602.     While (K < KList.Count) and (Gefunden = False) do begin
  603.       KStr:= KList[K];
  604.       Strip(KStr);
  605.       if Pos('{KEYNO='+DezStr(idx),KStr) > 0 then Gefunden:= True
  606.       else Inc(K);
  607.     end;
  608.     if Gefunden then begin
  609.       KeyLen:= 0;
  610.       ZStr:= UpperCase(S);
  611.       Strip(ZStr);
  612.       xPos:= Pos('KEYL:=',ZStr);
  613.       if xPos > 0 then begin
  614.         Delete(ZStr,1,xPos + 5);
  615.         xPos:= Pos(';',ZStr);
  616.         if xPos > 0 then begin
  617.           ZStr:= Copy(ZStr,1,xPos-1);
  618.           Strip(ZStr);
  619.           Val(ZStr,KeyLen,Code);
  620.         end;
  621.       end;
  622.       KStr:= KList[K];
  623.       xPos:= Pos('{KEYLEN=',KStr);
  624.       if xPos > 0 then begin
  625.         Delete(KStr,xPos,7);
  626.         While (Length(KStr) > xPos) and (KStr[xPos] <> '}') do Delete(KStr,xPos,1);
  627.         if KStr[xPos] = '}' then Delete(KStr,xPos,1);
  628.       end;
  629.       KStr:= KStr + '{KEYLEN='+DezStr(KeyLen)+'}';
  630.       ZStr:= UpperCase(S);
  631.       DupKey:= (Pos('TRUE',ZStr) > 0);
  632.       xPos:= Pos('{DUPKEY=',KStr);
  633.       if xPos > 0 then begin
  634.         Delete(KStr,xPos,8);
  635.         While (Length(KStr) > xPos) and (KStr[xPos] <> '}') do Delete(KStr,xPos,1);
  636.         if KStr[xPos] = '}' then Delete(KStr,xPos,1);
  637.       end;
  638.       if DupKey then KStr:= KStr + '{DUPKEY=TRUE}'
  639.       else KStr:= KStr + '{DUPKEY=FALSE}';
  640.       KList[idx]:= KStr;
  641.     end;
  642.   end;
  643. end;
  644.  
  645. Procedure TIsamMainForm.Update_Listen(i: Integer);
  646. var L,x,IdxAnzahl,Code,xPos      : Integer;
  647.     ListText,LText,IStr,LStr,KStr: String;
  648. begin
  649.   Case i of
  650.     0: begin
  651.          RecList.Clear;
  652.          if Memo1.Lines.Count > 0 then begin
  653.            For x:= 0 to Memo1.Lines.Count-1 do RecList.Add(Memo1.Lines[x]);
  654.          end;
  655.          Memo2.Lines.Clear;
  656.          IIDList.Clear;
  657.          if KeyList.Count > 0 then begin
  658.            IdxAnzahl:= 0;
  659.            For x:= 0 to KeyList.Count-1 do begin
  660.              ListText:= KeyList[x];
  661.              LText:= Uppercase(ListText);
  662.              Strip(LText);
  663.              Memo2.Lines.Add(Listtext);
  664.              if Pos('KEYNO=',LText) > 0 then begin
  665.                Inc(IdxAnzahl);
  666.                Str(IdxAnzahl,IStr);
  667.                L:= 0;
  668.                if Pos('KEYLEN',LText) > 0 then begin
  669.                  LStr:= LText;
  670.                  Delete(LStr,1,Pos('KEYLEN',LStr)+6);
  671.                  if LStr[1] = '=' then Delete(LStr,1,1);
  672.                  if Pos('}',LStr) > 0 then begin
  673.                    LStr:= Copy(LStr,1,Pos('}',LStr)-1);
  674.                    Val(LStr,L,Code);
  675.                  end;
  676.                end;
  677.                Str(L,LStr);
  678.                if Pos('TRUE',LText) > 0 then IIDList.Add('IID['+IStr+'].KeyL:= '+LStr+'; IID['+IStr+'].AllowDupK:= TRUE;')
  679.                else IIDList.Add('IID['+IStr+'].KeyL:= '+LStr+'; IID['+IStr+'].AllowDupK:= FALSE;');
  680.              end;
  681.            end;
  682.          end
  683.          else Memo2.Lines.Add('F(Feldname,0);');
  684.          Memo3.Lines.Clear;
  685.          if IIDList.Count > 0 then begin
  686.            For x:= 0 to IIDList.Count-1 do Memo3.Lines.Add(IIDList[x]);
  687.          end
  688.          else Memo3.Lines.Add('IID[1].KeyL:= 0; IID[1].AllowDupK:= FALSE;');
  689.        end;
  690.     1: begin
  691.          KeyList.Clear;
  692.          if Memo2.Lines.Count > 0 then begin
  693.            KeyList.Add('(*{KEY BEGIN}');
  694.            idxAnzahl:= 0;
  695.            For x:= 0 to Memo2.Lines.Count-1 do begin
  696.              KStr:= Memo2.Lines[x];
  697.              if (Pos('KEY BEGIN',KStr) = 0) and (Pos('KEY END',KStr) = 0) then begin
  698.                Inc(IdxAnzahl);
  699.                if (Pos('S:=',KStr) = 0) then KStr:= 'S:='+KStr;
  700.                xPos:= Pos('{KEYNO=',KStr);
  701.                if xPos > 0 then begin
  702.                  Delete(KStr,xPos,7);
  703.                  While (Length(KStr) > xPos) and (KStr[xPos] <> '}') do Delete(KStr,xPos,1);
  704.                  if KStr[xPos] = '}' then Delete(KStr,xPos,1);
  705.                end;
  706.                KStr:= KStr + '{KEYNO='+DezStr(IdxAnzahl)+'}';
  707.                KeyList.Add(KStr);
  708.              end;
  709.            end;
  710.            KeyList.Add('{KEY END}*)');
  711.          end;
  712.          IIDList.Clear;
  713.          if Memo3.Lines.Count > 0 then begin
  714.            For x:= 0 to Memo3.Lines.Count-1 do begin
  715.              IIDList.Add(Memo3.Lines[x]);
  716.              Check_KeyList(Memo3.Lines[x],KeyList);
  717.            end;
  718.          end;
  719.        end;
  720.   end;
  721. end;
  722.  
  723. procedure TIsamMainForm.VorBttnClick(Sender: TObject);
  724. var i: Integer;
  725. begin
  726.   i:= Notebook1.PageIndex;
  727.   Case i of
  728.     0: begin
  729.          Update_Listen(0);
  730.          I:= 1;
  731.        end;
  732.     1: begin
  733.          Update_Listen(1);
  734.          i:= 2;
  735.        end;
  736.     2: i:= 3;
  737.     3: i:= 4;
  738.     4: ModalResult:= mrOk;
  739.   end;
  740.   Notebook1.PageIndex:= i;
  741.   CheckButtons;
  742. end;
  743.  
  744. procedure TIsamMainForm.EdiHauptCheckClick(Sender: TObject);
  745. begin
  746.   if EdiHauptCheck.Checked then BrwHauptCheck.Checked:= False;
  747. end;
  748.  
  749. procedure TIsamMainForm.BrwHauptCheckClick(Sender: TObject);
  750. begin
  751.   if BrwHauptCheck.Checked then EdiHauptCheck.Checked:= False;
  752. end;
  753.  
  754. procedure TIsamMainForm.SpeedButton1Click(Sender: TObject);
  755. var Txt: String;
  756. begin
  757.   if SaveDialog1.Execute then begin
  758.     Txt:= SaveDialog1.FileName;
  759.     While Pos('\',Txt) > 0 do Delete(Txt,1,Pos('\',Txt));
  760.     if Pos('.',Txt) > 0 then Txt:= Copy(Txt,1,Pos('.',Txt)-1);
  761.     Edit1.Text:= Txt;
  762.     {if EditorFormNameInput.Text = '' then} begin
  763.       EditorFormNameInput.Text:= Txt + 'Dialog';
  764.     end;
  765.   end;
  766.   CheckButtons;
  767. end;
  768.  
  769. procedure TIsamMainForm.SpeedButton3Click(Sender: TObject);
  770. var Txt: String;
  771. begin
  772.   if SaveDialog1.Execute then begin
  773.     Txt:= SaveDialog1.FileName;
  774.     While Pos('\',Txt) > 0 do Delete(Txt,1,Pos('\',Txt));
  775.     if Pos('.',Txt) > 0 then Txt:= Copy(Txt,1,Pos('.',Txt)-1);
  776.     Edit3.Text:= Txt;
  777.     if BrwFormNameInput.Text = '' then begin
  778.       BrwFormNameInput.Text:= Txt + 'Dialog';
  779.     end;
  780.   end;
  781.   CheckButtons;
  782. end;
  783.  
  784. procedure TIsamMainForm.SpeedButton4Click(Sender: TObject);
  785. begin
  786.   DirAuswahlDlg:= TDirAuswahlDlg.Create(Self);
  787.   Try
  788.     if Sprache = 1 then DirAuswahlDlg.Caption:= 'Select path';
  789.     if DirAuswahlDlg.ShowModal = mrOk then
  790.     DirInput.Text:= DirAuswahlDlg.DirectoryListbox1.Directory+'\';
  791.   Finally
  792.     DirauswahlDlg.Free;
  793.   end;
  794.   CheckButtons;
  795. end;
  796.  
  797. procedure TIsamMainForm.SpeedButton5Click(Sender: TObject);
  798. begin
  799.   if FontDialog1.Execute then EdiFontLabel.Font:= FontDialog1.Font;
  800. end;
  801.  
  802. procedure TIsamMainForm.SpeedButton6Click(Sender: TObject);
  803. begin
  804.   if FontDialog1.Execute then EdiInputFontLabel.Font:= FontDialog1.Font;
  805. end;
  806.  
  807. procedure TIsamMainForm.SpeedButton7Click(Sender: TObject);
  808. begin
  809.   if FontDialog1.Execute then LboxFontLabel.Font:= FontDialog1.Font;
  810. end;
  811.  
  812. procedure TIsamMainForm.Memo1Exit(Sender: TObject);
  813. begin
  814.   CheckButtons;
  815. end;
  816.  
  817. procedure TIsamMainForm.HelpBttnClick(Sender: TObject);
  818. begin
  819.   if Sprache = 1 then Application.HelpFile:= 'EXPTISAE.HLP'
  820.   else Application.HelpFile := 'EXPTISAM.HLP';
  821.   Application.HelpCommand(HELP_CONTENTS, 0);
  822. end;
  823.  
  824. procedure TIsamMainForm.FormKeyDown(Sender: TObject; var Key: Word;
  825.   Shift: TShiftState);
  826. begin
  827.   if Key = vk_F1 then HelpBttnClick(Sender);
  828. end;
  829.  
  830. Procedure TIsamMainForm.Setze_Sprache(S: Integer);
  831. begin
  832.   Case Sprache of
  833.     1: begin
  834.          CancelBttn.Caption:= '&Cancel';
  835.          CancelBttn.Hint:= 'Cancel';
  836.          Rueckbttn.Caption:= '&Back';
  837.          RueckBttn.Hint:= 'Back';
  838.          VorBttn.Caption:= '&Forward';
  839.          VorBttn.Hint:= 'Forward';
  840.          GroupBox2.Caption:= 'Editor Options';
  841.          EdiHauptCheck.Caption:= 'Editor as main window';
  842.          GroupBox4.Caption:= 'Browser Options';
  843.          BrwHauptCheck.Caption:= 'Browser as main window';
  844.          FileopenBttn.Hint:= 'Load file *.TYP';
  845.          GroupBox5.Caption:= 'Path and Filenames';
  846.          Label7.Caption:= 'Filename (without EXT)';
  847.          Label3.Caption:= 'create';
  848.          SpeedButton1.Hint:= 'Select Editor-FileName';
  849.          SpeedButton3.Hint:= 'Select Browser-FileName';
  850.          Label9.Caption:= 'Path-Name';
  851.          SpeedButton4.Hint:= 'Select path';
  852.          Label10.Caption:= 'INI-Filename';
  853.          Label11.Caption:= 'INI-Browsername';
  854.          GroupBox6.Caption:= 'Labels and Inputlines';
  855.          LabelNebenRadio.Caption:= 'side by side';
  856.          LabelueberRadio.Caption:= 'beneath';
  857.          GroupBox7.Caption:= 'Input-length';
  858.          LenFestRadio.Caption:= 'fixed';
  859.          LenVarRadio.Caption:= 'variable';
  860.          SpeedButton5.Hint:= 'Select Label-Font';
  861.          SpeedButton6.Hint:= 'Select Input-Font';
  862.          SpeedButton7.Hint:= 'Select Browser-Font';
  863.          Label2.Caption:= 'Table';
  864.          HelpBttn.Caption:= '&Help';
  865.          HelpBttn.Hint:= 'Help';
  866.          SprachBttn.Caption:= '&German';
  867.          SprachBttn.Hint:= 'Deutsche Sprache auswΣhlen';
  868.          DateiBttn.Hint:= 'Select ISAM-table';
  869.          DbStruBttn.Hint:= 'filename of the DBASE-structure file';
  870.        end;
  871.     else begin
  872.          CancelBttn.Caption:= 'Abbruch';
  873.          CancelBttn.Hint:= 'Abbruch';
  874.          Rueckbttn.Caption:= '&Zurⁿck';
  875.          RueckBttn.Hint:= 'Zurⁿck';
  876.          VorBttn.Caption:= '&Weiter';
  877.          VorBttn.Hint:= 'Weiter';
  878.          GroupBox2.Caption:= 'Editor Einstellungen';
  879.          EdiHauptCheck.Caption:= 'Editor als Hauptfenster';
  880.          GroupBox4.Caption:= 'Browser Einstellungen';
  881.          BrwHauptCheck.Caption:= 'Browser als Hauptfenster';
  882.          FileopenBttn.Hint:= 'TYP-Datei laden';
  883.          GroupBox5.Caption:= 'Pfad and Dateinamen';
  884.          Label7.Caption:= 'Dateiname (ohne EXT)';
  885.          Label3.Caption:= 'erzeugen';
  886.          SpeedButton1.Hint:= 'Editor-Sourcefilenamen auswΣhlen';
  887.          SpeedButton3.Hint:= 'Browser-Sourcefilenamen auswΣhlen';
  888.          Label9.Caption:= 'Ziel-Verzeichnis';
  889.          SpeedButton4.Hint:= 'Pfad auswΣhlen';
  890.          Label10.Caption:= 'INI-Dateiname';
  891.          Label11.Caption:= 'INI-Browsername';
  892.          GroupBox6.Caption:= 'Labels und Inputlines';
  893.          LabelNebenRadio.Caption:= 'nebeneinander';
  894.          LabelueberRadio.Caption:= 'untereinander';
  895.          GroupBox7.Caption:= 'Input-LΣnge';
  896.          LenFestRadio.Caption:= 'fest';
  897.          LenVarRadio.Caption:= 'variabel';
  898.          SpeedButton5.Hint:= 'Label-Font auswΣhlen';
  899.          SpeedButton6.Hint:= 'Input-Font auswΣhlen';
  900.          SpeedButton7.Hint:= 'Browser-Font auswΣhlen';
  901.          Label2.Caption:= 'Tabelle';
  902.          HelpBttn.Caption:= '&Hilfe';
  903.          HelpBttn.Hint:= 'Help';
  904.          SprachBttn.Caption:= '&English';
  905.          SprachBttn.Hint:= 'Select english language';
  906.          DateiBttn.Hint:= 'Isam-Tabelle auswΣhlen';
  907.          DbStruBttn.Hint:= 'Filename der DBASE-Struktur-Datei';
  908.        end;
  909.   end;
  910. end;
  911.  
  912. procedure TIsamMainForm.FormShow(Sender: TObject);
  913. begin
  914.   if Sprache <> 0 then Setze_Sprache(Sprache);
  915. end;
  916.  
  917. procedure TIsamMainForm.SprachBttnClick(Sender: TObject);
  918. begin
  919.   if Sprache = 0 then Sprache:= 1 else Sprache:= 0;
  920.   Setze_Sprache(Sprache);
  921. end;
  922.  
  923. procedure TIsamMainForm.DateiBttnClick(Sender: TObject);
  924. begin
  925.   if OpenDialog2.Execute then begin
  926.     TableNameInput.Text:= OpenDialog2.FileName;
  927.   end;
  928.   CheckButtons;
  929. end;
  930.  
  931. procedure TIsamMainForm.Edit1Exit(Sender: TObject);
  932. begin
  933.   if EditorFormNameInput.Text = '' then begin
  934.     EditorFormNameInput.Text:= Edit1.Text + 'Dialog';
  935.   end;
  936.   CheckButtons;
  937. end;
  938.  
  939. procedure TIsamMainForm.Edit3Exit(Sender: TObject);
  940. begin
  941.   if BrwFormNameInput.Text = '' then begin
  942.     BrwFormNameInput.Text:= Edit3.Text + 'Dialog';
  943.   end;
  944.   CheckButtons;
  945. end;
  946.  
  947. procedure TIsamMainForm.EditorFormNameInputExit(Sender: TObject);
  948. begin
  949.   CheckButtons;
  950. end;
  951.  
  952. procedure TIsamMainForm.BrwFormNameInputExit(Sender: TObject);
  953. begin
  954.   CheckButtons;
  955. end;
  956.  
  957. procedure TIsamMainForm.TableNameInputExit(Sender: TObject);
  958. begin
  959.   CheckButtons;
  960. end;
  961.  
  962. procedure TIsamMainForm.DirInputExit(Sender: TObject);
  963. begin
  964.   CheckButtons;
  965.   if Edit1.Text = '' then edit1.Text := 'Edi';
  966.   if edit3.Text = '' then Edit3.Text := 'Bro';
  967.   if DBStruEdit.Text = '' then DBStruEdit.Text := 'Stru';
  968. end;
  969.  
  970. procedure TIsamMainForm.DBaseExpCheckClick(Sender: TObject);
  971. begin
  972.   CheckButtons;
  973. end;
  974.  
  975. procedure TIsamMainForm.DBaseImpCheckClick(Sender: TObject);
  976. begin
  977.   CheckButtons;
  978. end;
  979.  
  980. procedure TIsamMainForm.DBStruEditExit(Sender: TObject);
  981. begin
  982.   CheckButtons;
  983. end;
  984.  
  985. procedure TIsamMainForm.DBStruBttnClick(Sender: TObject);
  986. var Txt: String;
  987. begin
  988.   if SaveDialog1.Execute then begin
  989.     Txt:= SaveDialog1.FileName;
  990.     While Pos('\',Txt) > 0 do Delete(Txt,1,Pos('\',Txt));
  991.     if Pos('.',Txt) > 0 then Txt:= Copy(Txt,1,Pos('.',Txt)-1);
  992.     DBStruEdit.Text:= Txt;
  993.   end;
  994.   CheckButtons;
  995. end;
  996.  
  997. procedure TIsamMainForm.FormKeyPress(Sender: TObject; var Key: Char);
  998. begin
  999.   if Key = #13 then begin
  1000.     Key := #0;
  1001.     Perform(WM_NEXTDLGCTL, 0, 0);
  1002.   end;
  1003. end;
  1004.  
  1005. procedure TIsamMainForm.SaveTypBttnClick(Sender: TObject);
  1006. var TypDatei: TextFile;
  1007.     I       : Integer;
  1008.     Txt     : String;
  1009. begin
  1010.   SaveDialog2.FileName:= TypDateiName;
  1011.   if SaveDialog2.Execute then begin
  1012.     TypDateiName:= SaveDialog2.FileName;
  1013.     if TypDateiName <> '' then begin
  1014.       AssignFile(TypDatei,TypDateiName);
  1015.       Rewrite(TypDatei);
  1016.       Writeln(TYPDATEI,'{TableName = '+TableNameInput.Text+'}');
  1017.       Writeln(TYPDATEI,'{EditorFormName = '+EditorFormNameInput.Text+'}');
  1018.       Writeln(TYPDATEI,'{EditorUnitName = '+Edit1.Text + '}');
  1019.       Writeln(TYPDATEI,'{BrowserFormName = '+BrwFormNameInput.Text+'}');
  1020.       Writeln(TYPDATEI,'{BrowserUnitName = '+Edit3.Text + '}');
  1021.       Writeln(TYPDATEI,'{StruUnitName = '+DBStruEdit.Text +'}');
  1022.       if RecList.Count > 0 then begin
  1023.         For i:= 0 to RecList.Count-1 do begin
  1024.           Txt:= Reclist[i];
  1025.           Writeln(TypDatei,Txt);
  1026.         end;
  1027.       end;
  1028.       if KeyList.Count > 0 then begin
  1029.         For i:= 0 to KeyList.Count-1 do begin
  1030.           Txt:= Keylist[i];
  1031.           Writeln(TypDatei,Txt);
  1032.         end;
  1033.       end;
  1034.       CloseFile(TypDatei);
  1035.     end;
  1036.   end;
  1037. end;
  1038.  
  1039. procedure TIsamMainForm.AliasEditClick(Sender: TObject);
  1040. begin
  1041.   CheckButtons;
  1042. end;
  1043.  
  1044. end.
  1045.